/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package clientes;

import alertas.alertError;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
import laboratorio.Clientes;

/**
 *
 * @author rocio
 */
@Entity
@Table(name = "cliente", catalog = "lpd", schema = "")
@NamedQueries({@NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c"), @NamedQuery(name = "Cliente.findByIDcliente", query = "SELECT c FROM Cliente c WHERE c.iDcliente = :iDcliente"), @NamedQuery(name = "Cliente.findByNif", query = "SELECT c FROM Cliente c WHERE c.nif = :nif"), @NamedQuery(name = "Cliente.findByNombre", query = "SELECT c FROM Cliente c WHERE c.nombre = :nombre"), @NamedQuery(name = "Cliente.findByDireccion", query = "SELECT c FROM Cliente c WHERE c.direccion = :direccion"), @NamedQuery(name = "Cliente.findByCp", query = "SELECT c FROM Cliente c WHERE c.cp = :cp"), @NamedQuery(name = "Cliente.findByProvincia", query = "SELECT c FROM Cliente c WHERE c.provincia = :provincia"), @NamedQuery(name = "Cliente.findByTlf1", query = "SELECT c FROM Cliente c WHERE c.tlf1 = :tlf1"), @NamedQuery(name = "Cliente.findByTlf2", query = "SELECT c FROM Cliente c WHERE c.tlf2 = :tlf2"), @NamedQuery(name = "Cliente.findByFax", query = "SELECT c FROM Cliente c WHERE c.fax = :fax"), @NamedQuery(name = "Cliente.findByEmail", query = "SELECT c FROM Cliente c WHERE c.email = :email"), @NamedQuery(name = "Cliente.findByFecha", query = "SELECT c FROM Cliente c WHERE c.fecha = :fecha"), @NamedQuery(name = "Cliente.findByObservaciones", query = "SELECT c FROM Cliente c WHERE c.observaciones = :observaciones"), @NamedQuery(name = "Cliente.findByContrasena", query = "SELECT c FROM Cliente c WHERE c.contrasena = :contrasena"), @NamedQuery(name = "Cliente.findByLetraDNI", query = "SELECT c FROM Cliente c WHERE c.letraDNI = :letraDNI"), @NamedQuery(name = "Cliente.findByLocalidad", query = "SELECT c FROM Cliente c WHERE c.localidad = :localidad")})
public class Cliente implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_cliente")
    private Integer iDcliente;
    @Basic(optional = false)
    @Column(name = "NIF")
    private int nif;
    @Basic(optional = false)
    @Column(name = "Nombre")
    private String nombre;
    @Basic(optional = false)
    @Column(name = "Direccion")
    private String direccion;
    @Basic(optional = false)
    @Column(name = "CP")
    private int cp;
    @Basic(optional = false)
    @Column(name = "Provincia")
    private String provincia;
    @Basic(optional = false)
    @Column(name = "Tlf1")
    private int tlf1;
    @Column(name = "Tlf2")
    private Integer tlf2;
    @Column(name = "Fax")
    private Integer fax;
    @Basic(optional = false)
    @Column(name = "Email")
    private String email;
    @Column(name = "Fecha")
    private String fecha;
    @Column(name = "Observaciones")
    private String observaciones;
    @Column(name = "Contrasena")
    private String contrasena;
    @Basic(optional = false)
    @Column(name = "LetraDNI")
    private String letraDNI;
    @Column(name = "Localidad")
    private String localidad;

    public Cliente() {
    }

    public Cliente(Integer iDcliente) {
        this.iDcliente = iDcliente;
        this.nif = 0;
        this.nombre = "";
        this.direccion = "";
        this.cp = 0;
        this.provincia = "";
        this.tlf1 = 0;
        this.email = "";
        this.fecha = String.valueOf(new Date());
        this.letraDNI = "";
    }

    public Cliente(Integer iDcliente, int nif, String nombre, String direccion, int cp, String provincia, int tlf1, String email, String letraDNI) {
        this.iDcliente = iDcliente;
        this.nif = nif;
        this.nombre = nombre;
        this.direccion = direccion;
        this.cp = cp;
        this.provincia = provincia;
        this.tlf1 = tlf1;
        this.email = email;
        Date d=new Date();
        this.fecha = String.valueOf(d.getDate()).concat("-").concat(String.valueOf(d.getMonth()+1)).concat("-").concat(String.valueOf(d.getYear()+1900));

        this.letraDNI = letraDNI;
    }
    //constructor validando datos
    public Cliente(String IDcliente, String Nombre, String Contrasena, String CP, String Direccion, String Email, String Fax, String LetraDNI, String Localidad, String Nif, String Observaciones, String Provincia, String Tlf1, String Tlf2, String Fecha,Clientes clientes) {
        Integer a=Integer.parseInt(IDcliente);
        this.iDcliente = a;
        
        if(Nombre==null || Nombre.equals("")){
            alertError error=new alertError("el nombre es un campo obligatorio",clientes);
            error.setVisible(true);
        }else{this.nombre = Nombre;}
        if (CP==null || CP.equals("")){
            alertError error=new alertError("el Codigo postal es un campo obligatorio");
            error.setVisible(true);
        }else{
            a=Integer.parseInt(CP);
            this.cp = a;}
        if (Direccion==null || Direccion.equals("")){
            alertError error=new alertError("la direccion es un campo obligatorio");
            error.setVisible(true);
        }else{this.direccion = Direccion;}
         if (Email==null || Email.equals("")){
            alertError error=new alertError("el email es un campo obligatorio");
        }else{this.email = Email;}

        if(Fax==null || Fax.equals("") ){
            this.fax=0;
        }else{
            a=Integer.parseInt(Fax);
            this.fax = a; }
        if (LetraDNI==null || LetraDNI.length()!=1 || LetraDNI.equals("")){
            alertError error=new alertError("la letra del dni es un campo obligatorio");
        }else{this.letraDNI = LetraDNI;}
        if(Localidad==null || Localidad.equals("")){
            this.localidad = null;
        }else{this.localidad = Localidad;}
        if(Nif==null || Nif.length()!=8 || Nif.equals("")){
            alertError error=new alertError("el NIF es un campo obligatorio");
        }else{
            a=Integer.parseInt(Nif);
            this.nif = a;}
        if(Observaciones==null || Observaciones.equals("")){
            this.observaciones= null;
        }else{this.observaciones= Observaciones;}

        if (Provincia==null || Provincia.equals("")){
            alertError error=new alertError("la provincia es un campo obligatorio");
            error.setVisible(true);
        }else{this.provincia = Provincia;}
        this.contrasena = null;
        if (Tlf1==null || Tlf1.equals("")){
            alertError error=new alertError("el telefono 1 es un campo obligatorio");
            error.setVisible(true);
        }else{
            a=Integer.parseInt(Tlf1);
            this.tlf1 = a;}
        if(Tlf2==null || Tlf2.equals("")){
            this.tlf2=0;
        }else{
            a=Integer.parseInt(Tlf2);
        }    this.tlf2 = a;
        if(Fecha==null || Fecha.equals("")){
           alertError error=new alertError("la fecha es un campo obligatorio");
           error.setVisible(true);
        }else{

            this.fecha = Fecha;}
    }

    public Integer getIDcliente() {
        return iDcliente;
    }

    public void setIDcliente(Integer iDcliente) {
        Integer oldIDcliente = this.iDcliente;
        this.iDcliente = iDcliente;
        changeSupport.firePropertyChange("IDcliente", oldIDcliente, iDcliente);
    }

    public int getNif() {
        return nif;
    }

    public void setNif(int nif) {
        int oldNif = this.nif;
        this.nif = nif;
        changeSupport.firePropertyChange("nif", oldNif, nif);
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        String oldNombre = this.nombre;
        this.nombre = nombre;
        changeSupport.firePropertyChange("nombre", oldNombre, nombre);
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        String oldDireccion = this.direccion;
        this.direccion = direccion;
        changeSupport.firePropertyChange("direccion", oldDireccion, direccion);
    }

    public int getCp() {
        return cp;
    }

    public void setCp(int cp) {
        int oldCp = this.cp;
        this.cp = cp;
        changeSupport.firePropertyChange("cp", oldCp, cp);
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        String oldProvincia = this.provincia;
        this.provincia = provincia;
        changeSupport.firePropertyChange("provincia", oldProvincia, provincia);
    }

    public int getTlf1() {
        return tlf1;
    }

    public void setTlf1(int tlf1) {
        int oldTlf1 = this.tlf1;
        this.tlf1 = tlf1;
        changeSupport.firePropertyChange("tlf1", oldTlf1, tlf1);
    }

    public Integer getTlf2() {
        return tlf2;
    }

    public void setTlf2(Integer tlf2) {
        Integer oldTlf2 = this.tlf2;
        this.tlf2 = tlf2;
        changeSupport.firePropertyChange("tlf2", oldTlf2, tlf2);
    }

    public Integer getFax() {
        return fax;
    }

    public void setFax(Integer fax) {
        Integer oldFax = this.fax;
        this.fax = fax;
        changeSupport.firePropertyChange("fax", oldFax, fax);
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        String oldEmail = this.email;
        this.email = email;
        changeSupport.firePropertyChange("email", oldEmail, email);
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        String oldFecha = this.fecha;
        this.fecha = fecha;
        changeSupport.firePropertyChange("fecha", oldFecha, fecha);
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        String oldObservaciones = this.observaciones;
        this.observaciones = observaciones;
        changeSupport.firePropertyChange("observaciones", oldObservaciones, observaciones);
    }

    public String getContrasena() {
        return contrasena;
    }

    public void setContrasena(String contrasena) {
        String oldContrasena = this.contrasena;
        this.contrasena = contrasena;
        changeSupport.firePropertyChange("contrasena", oldContrasena, contrasena);
    }

    public String getLetraDNI() {
        return letraDNI;
    }

    public void setLetraDNI(String letraDNI) {
        String oldLetraDNI = this.letraDNI;
        this.letraDNI = letraDNI;
        changeSupport.firePropertyChange("letraDNI", oldLetraDNI, letraDNI);
    }

    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        String oldLocalidad = this.localidad;
        this.localidad = localidad;
        changeSupport.firePropertyChange("localidad", oldLocalidad, localidad);
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (iDcliente != null ? iDcliente.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cliente)) {
            return false;
        }
        Cliente other = (Cliente) object;
        if ((this.iDcliente == null && other.iDcliente != null) || (this.iDcliente != null && !this.iDcliente.equals(other.iDcliente))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "laboratorio.Cliente[iDcliente=" + iDcliente + "]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }

}
